package main

import (
	"context"
	"fmt"
	"log"

	"gopkg.in/ini.v1"
)

// App struct
type App struct {
	ctx context.Context
}

// NewApp creates a new App application struct
func NewApp() *App {
	return &App{}
}

// startup is called when the app starts. The context is saved
// so we can call the runtime methods
func (a *App) startup(ctx context.Context) {
	a.ctx = ctx
}

// Greet returns a greeting for the given name
func (a *App) Greet(name string) string {
	return fmt.Sprintf("Hello %s, It's show time!", name)
}

// Greet returns a greeting for the given name
func (a *App) GetIcons() string {
	return fmt.Sprintf("uiw:like-o")
}

func (a *App) SetIcons(icon string) string {
	return fmt.Sprintf("uiw:like-o")
}

// 读取配置值
func (a *App) GetConfig(node string, name string) string {
	// 1. 读取INI文件
	cfg, err := ini.Load("config.ini")
	if err != nil {
		// 如果文件不存在，创建新的配置文件
		cfg = ini.Empty()
		if err := cfg.SaveTo("config.ini"); err != nil {
			log.Printf("创建配置文件失败: %v", err)
		}
		return ""
	}
	return cfg.Section(node).Key(name).String()
}

// 设置配置值
func (a *App) SetConfig(node string, name string, value string) string {
	// 1. 读取INI文件
	cfg, err := ini.Load("config.ini")
	if err != nil {
		// 如果文件不存在，创建新的配置文件
		cfg = ini.Empty()
	}
	// 设置配置值
	cfg.Section(node).Key(name).SetValue(value)
	// 保存配置文件
	if err := cfg.SaveTo("config.ini"); err != nil {
		log.Printf("保存配置文件失败: %v", err)
	}
	return cfg.Section(node).Key(name).String()
}

// onSecondInstanceLaunch 处理第二个实例启动时的行为
// 当用户尝试启动应用程序的第二个实例时，此方法会被调用
// 通常的行为是显示主窗口并将其置于前台
func (a *App) onSecondInstanceLaunch(ctx context.Context, args []string) {
	// 确保应用程序上下文已初始化
	if a.ctx == nil {
		log.Println("应用程序上下文未初始化")
		return
	}

	// 显示主窗口（如果被最小化或隐藏）
	wails.Show(a.ctx)

	// 将主窗口置于前台
	FocusWindow(a.ctx)

	// 可以在这里处理从第二个实例传递的命令行参数
	if len(args) > 0 {
		log.Printf("收到来自第二个实例的参数: %v", args)
		// 示例：将参数传递给前端
		runtime.EventsEmit(a.ctx, "second-instance-args", args)
	}
}
